# -*-coding:utf-8-*-
import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)
s1 = pd.Series([84, 56, 83], index=list('bcd'))
s2 = pd.Series([45, 51, 89], index=list('abc'))
df1 = pd.DataFrame({'语': [84, 56, 84], '数': [45, 51, 89]}, index=list('bcd'))
df2 = pd.DataFrame({'语': [72, 39, 91], '数': [64, 85, 90]}, index=list('abc'))

"""索引自动实现数据对齐的功能
series/dataFrame之间进行运算时会自动对索引进行排序，索引相同的部分数据进行运算，索引不同的部分数据会被设为NAN
>>> s3
a      NaN
b    135.0
c    145.0
d      NaN
>>> df3
      语     数
a    NaN    NaN
b  123.0  130.0
c  147.0  141.0
d    NaN    NaN
"""
s3 = s1+s2
df3 = df1+df2

"""重新设置索引（指定索引值）
reindex(labels,index,columns,axis,method,copy=True,level,fill_value,limit,tolerance)
    对series/dataFrame重新设置索引。如果新增索引，则其对应的值为nan。如果减少索引，就相当于一个切片操作
    -index：行索引
    -columns：列索引
    -method：重设索引时，给新增的索引对应的值进行填充的方法（原本为空的值不会被填充），可以是'ffill'、'bfill'
    -fill_value：新增的索引对应的值要填充的数据（原本为空的值不会被填充）
>>> s4
a     NaN
b    84.0
c    56.0
e     NaN
>>> s5
a     NaN
b    84.0
c    56.0
e    83.0
>>> s6
a     0
b    84
c    56
e     0
>>> df4
   语  数  英
b  84  45 NaN
c  56  51 NaN
d  84  89 NaN
"""
s4 = s1.reindex(index=list('abce'))
s5 = s1.reindex(index=list('abce'), method='ffill')
s6 = s1.reindex(index=list('abce'), fill_value=0)
df4 = df1.reindex(columns=['语', '数', '英'])

"""重新设置索引（重置成0、1、2...）
reset_index(level=None, drop=False, inplace=False)
    -drop：是否删除原来的索引，不删除时原来的索引将插入到第一列
>>> s7
0    84
1    56
2    83
dtype: int64
>>> df5
  index  语  数
0     b  84  45
1     c  56  51
2     d  84  89
"""
s7 = s1.reset_index(drop=True)
df5 = df1.reset_index()

"""df设置某列为索引
set_index(keys,drop=True,append=False,inplace=False,verify_integrity=False)
    使用现有列设置DataFrame索引
    -keys：此参数可以是单个列名、或多个列名组成的列表
    -drop：删除要用作新索引的列。
    -append：是否将列附加到现有索引。
>>> df5
      数
  语    
b 84  45
c 56  51
d 84  89
"""
df6 = df1.set_index('语', append=True)
